/*******************************************************************************
 * Copyright (c) 2010, 2018 西安秦晔信息科技有限公司
 * Licensed under the Apache License, Version 2.0 (the "License");
 *    you may not use this file except in compliance with the License.
 *    You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 *    Unless required by applicable law or agreed to in writing, software
 *    distributed under the License is distributed on an "AS IS" BASIS,
 *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *    See the License for the specific language governing permissions and
 *    limitations under the License.
 *******************************************************************************/
package com.qinyeit.serviceapp.quartz;

import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

/**
 * <p>AnnotationName: com.qinyeit.serviceapp.quartz.TriggerDetail
 * <p>Function: 触发器详情，标注在job上
 * <p>date: 2018-09-08 14:06
 * Cron表达式说明：
 * 七子表达式：
 * 1 Seconds (秒)         ：可以用数字0－59 表示
 * 2 Minutes(分)          ：可以用数字0－59 表示
 * 3 Hours(时)            ：可以用数字0-23表示
 * 4 Day-of-Month(天)     ：可以用数字1-31 中的任一一个值，但要注意一些特别的月份
 * 5 Month(月)            ：可以用0-11 或用字符串  “JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV and DEC”表示
 * 6 Day-of-Week(每周)    ：可以用数字1-7表示（1 ＝ 星期日）或用字符口串“SUN, MON, TUE, WED, THU, FRI and SAT”表示
 * 7 Year(年)             ：可选字段
 *
 *
 * Cron表达式的格式：秒 分 时 日 月 周 年(可选)。
 * 字段名              允许的值                    允许的特殊字符
 * 秒                   0-59                       , - * /
 * 分                   0-59                       , - * /
 * 小时                 0-23                       , - * /
 * 日                   1-31                       , - * ? / L W C
 * 月                   1-12 or JAN-DEC            , - * /
 * 周几                 1-7 or SUN-SAT             , - * ? / L C #
 * 年(可选字段)         empty                      1970-2099 , - * /
 *
 * 特殊字符说明：
 * * ：代表所有可能的值
 * - ：表示指定范围
 * , ：表示列出枚举值。例如：在Minutes子表达式中，“5,20”表示在5分钟和20分钟触发
 * / ：被用于指定增量。例如：在Minutes子表达式中，“0/15”表示从0分钟开始，每15分钟执行一次
 * ? ：用在Day-of-Month和Day-of-Week中，指“没有具体的值”。当两个子表达式其中一个被指定了值以后，为了避免冲突，需要将另外一个的值设为“?”
 * L ：用在day-of-month和day-of-week字串中。它是单词“last”的缩写。它在两个子表达式中的含义是不同的。
 *     在day-of-month中，“L”表示一个月的最后一天，一月31号，3月30号。
 *     在day-of-week中，“L”表示一个星期的最后一天，也就是“7”或者“SAT”
 *     如果“L”前有具体内容，它就有其他的含义了。例如：“6L”表示这个月的倒数第六天。“FRIL”表示这个月的最后一个星期五。
 *     注意：在使用“L”参数时，不要指定列表或者范围，这样会出现问题。
 * W ：“Weekday”的缩写。只能用在day-of-month字段。用来描叙最接近指定天的工作日（周一到周五）。例如：在day-of-month字段用“15W”指“最接近这个月第15天的工作日”
 * # ：只能用在day-of-week字段。用来指定这个月的第几个周几。例：在day-of-week字段用"6#3" or "FRI#3"指这个月第3个周五（6指周五，3指第3个）。如果指定的日期不存在，触发器就不会触发。
 * @author wuqing
 * @version 1.0
 * @since JDK 1.8
 */
@Retention(RUNTIME)
@Target(TYPE)
public @interface TriggerDetail {
    String jobName() default "";    //任务名称
    String jobGroup() default "";   //任务分组
    String cronExpression();        //cron表达式
    String description() default "";//任务描述
}
//    表达式例子
//    0 * * * * ? 每1分钟触发一次
//    0 0 * * * ? 每天每1小时触发一次
//    0 0 10 * * ? 每天10点触发一次
//    0 * 14 * * ? 在每天下午2点到下午2:59期间的每1分钟触发
//    0 30 9 1 * ? 每月1号上午9点半
//    0 15 10 15 * ? 每月15日上午10:15触发
//
//    */5 * * * * ? 每隔5秒执行一次
//    0 */1 * * * ? 每隔1分钟执行一次
//    0 0 5-15 * * ? 每天5-15点整点触发
//    0 0/3 * * * ? 每三分钟触发一次
//    0 0-5 14 * * ? 在每天下午2点到下午2:05期间的每1分钟触发
//    0 0/5 14 * * ? 在每天下午2点到下午2:55期间的每5分钟触发
//    0 0/5 14,18 * * ? 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
//    0 0/30 9-17 * * ? 朝九晚五工作时间内每半小时
//    0 0 10,14,16 * * ? 每天上午10点，下午2点，4点
//
//    0 0 12 ? * WED 表示每个星期三中午12点
//    0 0 17 ? * TUES,THUR,SAT 每周二、四、六下午五点
//    0 10,44 14 ? 3 WED 每年三月的星期三的下午2:10和2:44触发
//    0 15 10 ? * MON-FRI 周一至周五的上午10:15触发
//
//    0 0 23 L * ? 每月最后一天23点执行一次
//    0 15 10 L * ? 每月最后一日的上午10:15触发
//    0 15 10 ? * 6L 每月的最后一个星期五上午10:15触发
//
//    0 15 10 * * ? 2005 2005年的每天上午10:15触发
//    0 15 10 ? * 6L 2002-2005 2002年至2005年的每月的最后一个星期五上午10:15触发
//    0 15 10 ? * 6#3 每月的第三个星期五上午10:15触发
